const bcrypt = require('bcryptjs');
const jwt = require('jsonwebtoken');
const User = require('../models/user.model');

class AuthController {
    // 用户注册
    static async register(req, res) {
        try {
            const { username, account, password, phone } = req.body;

            // 检查账号是否已存在
            const existingAccount = await User.findByAccount(account);
            if (existingAccount) {
                return res.status(400).json({ message: '账号已存在' });
            }

            // 检查手机号是否已存在
            if (phone) {
                const existingPhone = await User.findByPhone(phone);
                if (existingPhone) {
                    return res.status(400).json({ message: '手机号已被使用' });
                }
            }

            // 创建新用户
            const userId = await User.create({
                username,
                account,
                password,
                phone
            });

            res.status(201).json({
                message: '注册成功',
                userId
            });
        } catch (error) {
            console.error('注册错误:', error);
            res.status(500).json({ message: '服务器错误' });
        }
    }

    // 用户登录
    static async login(req, res) {
        try {
            const { account, password } = req.body;

            // 查找用户
            const user = await User.findByAccount(account);
            if (!user) {
                return res.status(401).json({ message: '账号或密码错误' });
            }

            // 验证密码
            const isValidPassword = await bcrypt.compare(password, user.password);
            if (!isValidPassword) {
                return res.status(401).json({ message: '账号或密码错误' });
            }

            // 生成 JWT token
            const token = jwt.sign(
                { 
                    userId: user.user_id,
                    account: user.account,
                    role: user.role 
                },
                process.env.JWT_SECRET,
                { expiresIn: process.env.JWT_EXPIRES_IN }
            );

            res.json({
                message: '登录成功',
                token,
                user: {
                    userId: user.user_id,
                    username: user.username,
                    account: user.account,
                    role: user.role,
                    avatar: user.avatar || '/uploads/avatars/default-avatar.png'
                }
            });
        } catch (error) {
            console.error('登录错误:', error);
            res.status(500).json({ message: '服务器错误' });
        }
    }

    // 获取用户信息
    static async getUserInfo(req, res) {
        try {
            const userId = req.user.userId;
            const user = await User.findById(userId);
            
            if (!user) {
                return res.status(404).json({ message: '用户不存在' });
            }

            res.json({
                code: 200,
                data: {
                    userId: user.user_id,
                    username: user.username,
                    account: user.account,
                    role: user.role,
                    phone: user.phone,
                    avatar: user.avatar,
                    createdAt: user.created_at,
                    updatedAt: user.updated_at
                }
            });
        } catch (error) {
            console.error('获取用户信息错误:', error);
            res.status(500).json({ message: '服务器错误' });
        }
    }

    // 更新个人资料
    static async updateProfile(req, res) {
        try {
            const userId = req.user.userId;
            const { username, phone, avatar } = req.body;
            
            // 验证手机号唯一性
            if (phone) {
                const isPhoneUsed = await User.isPhoneUsedByOthers(phone, userId);
                if (isPhoneUsed) {
                    return res.status(400).json({ message: '该手机号已被其他用户使用' });
                }
            }

            // 更新用户信息
            const success = await User.updateProfile(userId, {
                username,
                phone,
                avatar
            });

            if (success) {
                // 获取更新后的用户信息
                const updatedUser = await User.findById(userId);
                res.json({
                    code: 200,
                    message: '个人资料更新成功',
                    data: {
                        userId: updatedUser.user_id,
                        username: updatedUser.username,
                        account: updatedUser.account,
                        phone: updatedUser.phone,
                        avatar: updatedUser.avatar,
                        role: updatedUser.role,
                        createdAt: updatedUser.created_at,
                        updatedAt: updatedUser.updated_at
                    }
                });
            } else {
                res.status(400).json({ message: '更新失败，请检查输入' });
            }
        } catch (error) {
            console.error('更新个人资料错误:', error);
            res.status(500).json({ message: '服务器错误' });
        }
    }

    // 上传头像
    static async uploadAvatar(req, res) {
        try {
            if (!req.file) {
                return res.status(400).json({ message: '请选择要上传的头像文件' });
            }

            const userId = req.user.userId;
            const avatarPath = `/uploads/avatars/${req.file.filename}`; // 存储相对路径

            // 更新用户头像
            const success = await User.updateProfile(userId, {
                avatar: avatarPath
            });

            if (success) {
                const updatedUser = await User.findById(userId);
                res.json({
                    code: 200,
                    message: '头像上传成功',
                    data: {
                        avatar: updatedUser.avatar
                    }
                });
            } else {
                res.status(400).json({ message: '头像更新失败' });
            }
        } catch (error) {
            console.error('上传头像错误:', error);
            res.status(500).json({ message: '服务器错误' });
        }
    }
}

module.exports = AuthController; 